CREATE SEQUENCE eventos_seq;

CREATE TABLE ID_Facebook (
	id_facebook 	VARCHAR(100) 	PRIMARY KEY,
	quem_eh 		TEXT
);

CREATE TABLE Animacao (
	id 		INTEGER 		DEFAULT nextval('eventos_seq') 	PRIMARY KEY,
	nome 		TEXT 		NOT NULL, 
	local 		TEXT, 
	data_inicio 	DATE 	NOT NULL, 
	data_fim 	DATE,
	descricao 	TEXT,
	quem_mexeu 	VARCHAR(100) REFERENCES ID_Facebook(id_facebook),
	quando_mexeu 	TIMESTAMP 	DEFAULT NOW()
);

CREATE TABLE Tipo_Missa (
	id 		SERIAL 		PRIMARY KEY,
	tipo 		TEXT 		NOT NULL
);

CREATE TABLE Missa (
	id 		INTEGER 		DEFAULT nextval('eventos_seq') 	PRIMARY KEY,
	nome 		TEXT 		NOT NULL, 
	local 		TEXT, 
	data_inicio 	DATE 	NOT NULL, 
	data_fim 	DATE,
	descricao 	TEXT,
	tipo_id		INTEGER 	NOT NULL REFERENCES Tipo_Missa(id) ON DELETE CASCADE,
	quem_mexeu 	VARCHAR(100) REFERENCES ID_Facebook(id_facebook),
	quando_mexeu 	TIMESTAMP 	DEFAULT NOW()
);

CREATE TABLE Tag (
	id 		SERIAL 		PRIMARY KEY,
	tag 		TEXT 		NOT NULL
);

CREATE TABLE Musica (
	id 		SERIAL 		PRIMARY KEY,
	titulo 		TEXT 		NOT NULL, 
	letra 		TEXT, 
	tom_padrao 	TEXT, 
	observacoes 	TEXT,
	de_quem_eh 	TEXT,
	quem_mexeu 	VARCHAR(100) REFERENCES ID_Facebook(id_facebook),
	quando_mexeu 	TIMESTAMP 	DEFAULT NOW()
);

CREATE TABLE Link (
	id 		SERIAL 		PRIMARY KEY,
	tipo 		TEXT 		NOT NULL,
	url 		TEXT 		NOT NULL,
	musica_id 	INTEGER 	NOT NULL 	REFERENCES Musica(id) ON DELETE CASCADE
);

CREATE TABLE Musica_Tag (
	musica_id 	INTEGER 	NOT NULL 	REFERENCES Musica(id) ON DELETE CASCADE,
	tag_id 		INTEGER 	NOT NULL 	REFERENCES Tag(id) ON DELETE CASCADE
);

CREATE TABLE Musica_Animacao (
	musica_id 	INTEGER 	NOT NULL 	REFERENCES Musica(id) ON DELETE CASCADE,
	animacao_id 	INTEGER 	NOT NULL 	REFERENCES Animacao(id) ON DELETE CASCADE,
	tom 		TEXT,
	quem_canta 	TEXT,
	ordem 		INTEGER
);

CREATE TABLE Musica_Missa (
	musica_id 		INTEGER 	NOT NULL 	REFERENCES Musica(id) ON DELETE CASCADE,
	missa_id 		INTEGER 	NOT NULL 	REFERENCES Missa(id) ON DELETE CASCADE,
	tom 			TEXT,
	parte_missa 	TEXT
);

CREATE VIEW Evento 
	AS (SELECT m.id AS id, m.nome AS nome, m.local AS local, m.data_inicio AS data_inicio, m.data_fim AS data_fim, m.descricao AS descricao, m.quem_mexeu AS quem_mexeu, m.quando_mexeu AS quando_mexeu, 'Missa' AS tipo 
			FROM Missa m)
		UNION
			(SELECT a.id AS id, a.nome AS nome, a.local AS local, a.data_inicio AS data_inicio, a.data_fim AS data_fim, a.descricao AS descricao, a.quem_mexeu AS quem_mexeu, a.quando_mexeu AS quando_mexeu, 'Animação' AS tipo
				FROM Animacao a);

CREATE OR REPLACE FUNCTION limpar_string(texto TEXT) 
RETURNS TEXT AS $$ 
	SELECT LOWER(TRANSLATE($1, '\n\r,.!?-_\'"', ' '));
$$ LANGUAGE 'SQL';
